<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Model_academico extends CI_Model {

    /**
     * Model principal academico;
     */
    function __construct() {
        parent::__construct();
    }

    function get_disciplinas($dia, $dcp_not) {
        $user = $this->session->userdata('co_usuario');
        $ctx_ativo = str_replace('/', '', $this->session->userdata('contexto'));
        $this->db->from('vw_turmas_ativas t');
        $this->db->join('tb_aluno a', 'a.co_curso = t.co_curso and a.nu_matriz_vigente = t.nu_matriz');
        $this->db->join('tb_usuario u', 'a.co_pessoa = u.co_pessoa');
        $this->db->where('u.co_usuario', $user);
        $this->db->where('t.co_semestre', $ctx_ativo);
        $this->db->where_not_in('t.co_turma', $dcp_not);
        if ($dia === 'ead') {
            $this->db->where('t.st_permite_ead', 'S');
            $this->db->order_by("no_disciplina", "asc");
        } else {
            $this->db->where('t.co_dia', $dia);
            $this->db->order_by("t.nu_periodo_turma", "asc");
        }

        $query = $this->db->get();
        return $query->result();
    }

    function get_cograde($aluno, $contexto) {
        $this->db->select('co_grade');
        $this->db->from('tb_grade_aluno');
        $this->db->where('co_usuario', $aluno);
        $this->db->where('nu_semestre_letivo', $contexto);
        $this->db->where('st_ativo', 'S');
        $query = $this->db->get();
        $result = $query->result_array();
        if ($result) {
            return $result[0]['co_grade'];
        } else {
            return false;
        }
    }

    function get_grade($co_grade) {
        if (empty($co_grade)) {
            return false;
        }
        $this->db->from('tb_grade_aluno');
        $this->db->where('co_grade', $co_grade);
        $query = $this->db->get();
        $ra = $query->result_array();
        return $ra[0];
    }

    function get_turma($turma) {
        $this->db->select('t.*, d.no_disciplina as no_dcp_requisito');
        $this->db->from('vw_turmas_ativas as t');
        $this->db->where('t.co_turma', $turma);
        $this->db->join('tb_disciplina as d', 't.requisito = d.co_disciplina', 'left outer');
        $query = $this->db->get();
        return $query->result();
    }

    function get_dcp_bd($grade) {
        $this->db->select('t.co_turma, t.no_disciplina, t.no_professor, t.co_dia, a.st_turma_ead');
        $this->db->from('vw_turmas_ativas as t');
        $this->db->where('a.co_grade', $grade);
        $this->db->join('tb_aluno_turma as a', 't.co_turma = a.co_turma');
        $query = $this->db->get();
        return $query->result_array();
    }

    function get_ls_periodo($tmp) {
        $this->db->select('nu_periodo_turma periodo, count(nu_periodo_turma) disciplinas', FALSE);
        $this->db->from('vw_turmas_ativas');
        $this->db->where('co_semestre', $tmp['semestre']);
        $this->db->where('nu_matriz', $tmp['matriz']);
        $this->db->where('co_curso', $tmp['curso']);
        $this->db->group_by('nu_periodo_turma');
        $query = $this->db->get();
        return $query->result_array();
    }

    function get_tmp_periodo($tmp) {
        $this->db->select('co_turma turma, no_disciplina disciplina, no_professor professor, co_dia dia');
        $this->db->from('vw_turmas_ativas');
        $this->db->where('nu_periodo_turma', $tmp['periodo']);
        $this->db->where('co_semestre', $tmp['semestre']);
        $this->db->where('nu_matriz', $tmp['matriz']);
        $this->db->where('co_curso', $tmp['curso']);
        $query = $this->db->get();
        return $query->result_array();
    }

    function get_turmas_aluno($grade) {
        $this->db->select('t.CO_TURMA');
        $this->db->from('tb_aluno_turma as t');
        $this->db->where('t.co_grade', $grade);
        $query = $this->db->get();
        return $query->result_array();
    }

    function set_turmas_aluno($turma) {
        $this->db->insert_batch('tb_aluno_turma', $turma);
    }

    function ajusta_turmas_aluno($grade, $turma, $tp_turma) {
        $this->db->where('co_grade', $grade);
        $this->db->where('co_turma', $turma);
        $this->db->update('tb_aluno_turma', $tp_turma);
        return $this->db->affected_rows();
    }

    function remove_turmas_aluno($turmas) {
        if (count($turmas)) {
            foreach ($turmas as $turma) {
                $this->db->delete('tb_aluno_turma', array('co_turma' => $turma['turma'], 'co_grade' => $turma['grade']));
            }
        }
    }

    function get_evt_grade($grade, $notIn = ['']) {
        $this->db->from('vw_evento_grade');
        $this->db->where('CO_GRADE', $grade);
        $this->db->where_not_in('tp_evento', $notIn);
        $this->db->order_by("DT_EVENTO DESC, CO_EVENTO DESC");
        $query = $this->db->get();
        return $query->result();
    }

    function set_evt_grade($eventos, $status = 'A') {
        if (count($eventos)) {
            foreach ($eventos as $evt) {
                $evt_data = ['NO_EVENTO' => $evt['no_evento'], 'TP_EVENTO' => $evt['tp_evento'], 'DS_EVENTO' => $evt['ds_evento']];
                $this->db->insert('tb_evento', $evt_data);
                $last = $this->db->insert_id();
                $evt_gr_data = ['CO_GRADE' => $evt['co_grade'], 'CO_EVENTO' => $last];
                $this->db->insert('tb_evt_grade', $evt_gr_data);
                $this->db->update('tb_grade_aluno', ['ST_STATUS_GRADE' => $status], ['CO_GRADE' => $evt['co_grade']]);
            }
            return $last;
        }
    }

    function send_msg_grade($msg, $grade) {
        $this->db->insert('tb_evento', $msg);
        $last = $this->db->insert_id();
        $evt_gr_data = ['CO_GRADE' => $grade, 'CO_EVENTO' => $last];
        $msg_r = $this->db->insert('tb_evt_grade', $evt_gr_data);
        if ($msg_r) {
            return $last;
        } else {
            return '-1';
        }
    }

    function edit_msg_grade($operacao, $id, $msg = "") {
        if ($operacao === 'edit') {
            $msg_upd = preg_replace('/^[\?]+/', '', urldecode($msg));
            $this->db->update('tb_evento', ['DS_EVENTO' => $msg_upd], ['CO_EVENTO' => $id]);
        }
        if ($operacao === 'remove') {
            $this->db->update('tb_evento', ['ST_ATIVO' => 'N'], ['CO_EVENTO' => $id]);
        }
        if ($operacao === 'read') {
            $this->db->update('tb_evento', ['ST_LIDO' => 'S'], ['CO_EVENTO' => $id]);
            return $this->db->affected_rows();
        }
    }

    function getCoordenador($aluno) {
        $this->db->select('c.co_coordenador');
        $this->db->from('tb_usuario u');
        $this->db->join('tb_aluno as a', 'u.co_pessoa  = a.co_pessoa');
        $this->db->join('tb_curso as c', 'a.co_curso = c.co_curso');
        $this->db->where('u.co_usuario', $aluno);
        $query = $this->db->get();
        $arrCoord = $query->result_array();
        return $arrCoord[0]['co_coordenador'];
    }

    function listarGrades($contexto, $curso) {
        $this->db->select('g.co_grade codigo, g.nu_semestre_letivo contexto, g.st_status_grade status, u.no_pessoa nome,'
                . 'u.nu_matricula matricula, u.ano_semestre_inicio ano, u.nu_semestre_inicio semestre');
        $this->db->from('tb_grade_aluno g');
        $this->db->join('vw_usuario u', 'g.co_usuario = u.co_usuario');
        $this->db->where('g.st_ativo', 'S');
        $this->db->where('u.st_usuario_ativo', 'S');
        //$this->db->where('g.nu_semestre_letivo', $contexto);
        $this->db->where('u.co_curso', $curso);
        $this->db->order_by('u.no_pessoa', 'asc');
        $query = $this->db->get();
        return $query->result_array();
    }

    function listarRq($usuario) {
        $this->db->select('t.co_requerimento id, t.co_categoria categoria, c.ds_tipo_requerimento tipo, t.no_requerimento nome, '
                . 't.st_status_requerimento status, date_format(t.dt_atualizacao,\'%d/%m/%Y\') dt_criacao', FALSE);
        $this->db->from('tb_requerimento t');
        $this->db->join('tb_tipo_requerimento c', 't.co_categoria = c.co_tipo_requerimento');
        $this->db->where('t.co_usuario', $usuario);
        $this->db->where('t.st_ativo', 'S');
        $this->db->order_by('t.dt_atualizacao', 'desc');
        $query = $this->db->get();
        return $query->result_array();
    }

    function insereRq($dataRq) {
        $rq = $this->db->insert('tb_requerimento', $dataRq);
        return $rq;
    }

    function mostrarRq($rqr) {
        $this->db->select('r.co_requerimento, u.co_usuario as co_destinatario, u.no_pessoa as no_destinatario,' .
                'u.ft_foto_usuario ft_destinatario, t.ds_tipo_requerimento categoria, r.no_requerimento, r.ds_mensagem,', 'r.dt_atualizacao, r.st_status_requerimento as status', FALSE);
        $this->db->from('tb_requerimento r');
        $this->db->join('tb_tipo_requerimento t', 'r.CO_CATEGORIA = t.CO_TIPO_REQUERIMENTO');
        $this->db->join('tb_coordenador c', 'r.CO_COORDENADOR = c.CO_COORDENADOR');
        $this->db->join('vw_usuario u', 'c.CO_PESSOA = u.CO_PESSOA');
        $this->db->where('r.CO_REQUERIMENTO', $rqr);
        $query = $this->db->get();
        return $query->result_array();
    }

}

/* End of file model_academico.php */
    /* Location: ./application/models/model_academico.php */    